//package com.example.demo.redis;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.time.Duration;
//import java.util.List;
//import java.util.Objects;
//import java.util.Set;
//import java.util.concurrent.TimeUnit;
//
///**
// * 用于qukan3的redis cleint 用于访问redis 0号cache
// */
//@Slf4j
//@Service
//public class RedisStore
//{
//	@Autowired
//	@Resource(name = "DefaultStringRedisTemplate")
//	private StringRedisTemplate defaultStringRedis;
//
///*	@Resource(name = "DefaultRedisTemplate")
//	private RedisTemplate cacheRedisTemplate;
//
//
//	public void setObj(String key, Object obj,Long expiredSeconds) {
//		BoundHashOperations operations = cacheRedisTemplate.boundHashOps(key);
//		operations.put("value",obj);
//		if(expiredSeconds!=null){
//			operations.expire(expiredSeconds,TimeUnit.SECONDS);
//		}
//	}
//	public Object getObj(String key) {
//		BoundHashOperations operations = cacheRedisTemplate.boundHashOps(key);
//		return operations.get("value");
//	}
//
//	public void flushExpired(String key,Long expiredSeconds) {
//		if(key!=null&&expiredSeconds!=null){
//			BoundHashOperations operations = cacheRedisTemplate.boundHashOps(key);
//			operations.expire(expiredSeconds,TimeUnit.SECONDS);
//		}
//	}
//
//	public void removeObj(String key) {
//		cacheRedisTemplate.delete(key);
//	}
//*/
//
//
//	public Long hincr(String key, String field)
//	{
//		return defaultStringRedis.opsForHash().increment(key, field, 1L);
//	}
//
//	public Long hincrBy(String key, String field, long num) {
//		return defaultStringRedis.opsForHash().increment(key, field, num);
//	}
//
//	public String hget(String key, String field) {
//		return (String)defaultStringRedis.opsForHash().get(key, field);
//	}
//
//	/*public Map<String, String> hgetAll(String key) {
//		return defaultStringRedis.opsForHash().entries(key);
//	}*/
//
//	public void hset(String key, String field, String val) {
//		defaultStringRedis.opsForHash().put(key, field, val);
//	}
//
//	public void hdel(String key, String field) {
//		defaultStringRedis.opsForHash().delete(key, field);
//	}
//
//	public void del(String key) {
//		defaultStringRedis.delete(key);
//	}
//
//	public String get(String key) {
//		return defaultStringRedis.opsForValue().get(key);
//	}
//
//	public void set(String key, String value) {
//		defaultStringRedis.opsForValue().set(key, value);
//	}
//
//	public void setWithExpired(String key, String value, int expiredSecond) {
//		defaultStringRedis.opsForValue().set(key, value, Duration.ofSeconds(expiredSecond));
//	}
//
//	public void expire(String key, int expiredSecond) {
//		defaultStringRedis.expire(key, expiredSecond, TimeUnit.SECONDS);
//	}
//
//	public long ttl(String key) {
//		return defaultStringRedis.getExpire(key);
//	}
//
//	/*public long setExpire(String key,long unixTime){
//		Jedis jedis = null;
//		try {
//			jedis = getResource();
//			return jedis.expireAt(key,unixTime);
//		} finally {
//			if (jedis != null) {
//				jedis.close();
//			}
//		}
//
//
//	}*/
//
//	public long lPush(String key, String value) {
//		return defaultStringRedis.opsForList().leftPush(key, value);
//	}
//
//	public List<String> lRange(String key, long start, long end) {
//		return defaultStringRedis.opsForList().range(key, start, end);
//	}
//
//	public String rPop(String key) {
//		return defaultStringRedis.opsForList().rightPop(key);
//	}
//
//
//	public long incrBy(String key, int delta) {
//		return defaultStringRedis.opsForValue().increment(key, delta);
//	}
//
//	public boolean acquireLock(String key, int ttl) {
//		long r = incrBy(key, 1);
//		if (r <= 1) {
//			expire(key, ttl);
//			return true;
//		}
//		return false;
//	}
//
//	public void releaseLock(String key) {
//		del(key);
//	}
//
//
//	public long llength(String key){
//		return defaultStringRedis.opsForList().size(key);
//	}
//
//	/*public void ltrim(String key,long start,long end){
//
//		Jedis jedis =null ;
//		try{
//			jedis=getResource();
//			jedis.ltrim(key,start,end);
//		}finally {
//			if(jedis !=null){
//				jedis.close();
//			}
//		}
//	}*/
//
//	public void lrem(String key,int count,String value){
//		defaultStringRedis.opsForList().remove(key, count, value);
//	}
//
//	public void rpush(String key ,String... value){
//		defaultStringRedis.opsForList().rightPushAll(key, value);
//	}
//
//	/**
//	 * 空时设置才设置值(不能使用pipeline及事务!!!!)<br>
//	 *
//	 * @param key      key
//	 * @param value    值
//	 * @param ttl      过期时间
//	 * @param timeUnit 过期时间类型
//	 * @return true:设置成功;false:设置失败
//	 */
//	public Boolean setIfAbsent(String key, String value, int ttl, TimeUnit timeUnit) {
//		return defaultStringRedis.opsForValue().setIfAbsent(key, value, ttl, timeUnit);
//	}
//
//	/**
//	 * 根据特定值获取锁,通过1个指令完成 (不能使用pipeline及事务!!!!)<br>
//	 *
//	 * @param key     指令KEY
//	 * @param seconds 过期时间;单位(秒)
//	 * @return true 获取锁成功;false:获取锁失败;
//	 * @see #setIfAbsent
//	 */
//	public boolean acquireLockWithValue(String key, String value, int seconds) {
//		Boolean result = setIfAbsent(key, value, seconds, TimeUnit.SECONDS);
//		return Objects.equals(Boolean.TRUE, result);
//	}
//
//	/**
//	 * 获取锁,通过1个指令完成 (不能使用pipeline及事务!!!!)<br>
//	 *
//	 * @param key     指令KEY
//	 * @param seconds 过期时间;单位(秒)
//	 * @return true 获取锁成功;false:获取锁失败;
//	 * @see #setIfAbsent
//	 */
//	public boolean acquireLockNew(String key, int seconds) {
//		return acquireLockWithValue(key, "1", seconds);
//	}
//
//	/**
//	 * 一次性获取多个属性值,业务上需要自行处理<br>
//	 * 业务上处理需要注意!!!!!!<br> 10个key以内效率与一次取1个key效率比较，性能能达到1个key取值的80%左右;比多次取值快很多；
//	 *
//	 * @param keys 值列表
//	 * @return 按顺序的值列表
//	 */
//	public List<String> mget(List<String> keys) {
//		return defaultStringRedis.opsForValue().multiGet(keys);
//	}
//
//	// set 命令
//
//	/**
//	 * sMembers命令 根据key获取Set中的所有值
//	 *
//	 * @param key 键
//	 * @return set  值的集合
//	 */
//	public Set<String> sMembers(String key) {
//		 return defaultStringRedis.opsForSet().members(key);
//	}
//	/**
//	 * sIsMember命令 根据value从一个set中查询,是否存在
//	 *
//	 * @param key   键
//	 * @param value 值
//	 * @return true 存在 false不存在
//	 */
//	public boolean sIsMember(String key, Object value) {
//		return defaultStringRedis.opsForSet().isMember(key, value);
//	}
//
//	/**
//	 * sAdd命令 将数据放入set缓存
//	 *
//	 * @param key    键
//	 * @param values 值 可以是多个
//	 * @return 成功个数
//	 */
//	public long sAdd(String key, String... values) {
//		return defaultStringRedis.opsForSet().add(key, values);
//	}
//
//	/**
//	 * sCard命令 获取set缓存的长度
//	 *
//	 * @param key 键
//	 * @return long 个数
//	 */
//	public long sCard(String key) {
//		try {
//			return defaultStringRedis.opsForSet().size(key);
//		} catch (Exception e) {
//			e.printStackTrace();
//			return 0;
//		}
//	}
//
//	/**
//	 * sRem 移除值为value的
//	 *
//	 * @param key    键
//	 * @param values 值 可以是多个
//	 * @return 移除的个数
//	 */
//	public long sRem(String key, String... values) {
//		try {
//			return defaultStringRedis.opsForSet().remove(key, values);
//		} catch (Exception e) {
//			e.printStackTrace();
//			return 0;
//		}
//	}
//
//
//
//}
